<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    var list = [2, 8, 4, 6, 5, 9, 3, 7, 1];

    // 传统的数组遍历方法  => 麻烦 (每次都要自己写循环,取值,执行特定的操作)
    // for (var i = 0; i < list.length; i++) {
    //     var item = list[i]; // 循环的当前元素
    //     var index = i;      // 循环的当前下标
    //     var array = list;   // 原数组
    //     console.log(item,index,array);
    // }

    // var sum = 0;
    // for(var i in list){
    //     var item = list[i]; // 循环的当前元素
    //     var index = i;      // 循环的当前下标
    //     var array = list;   // 原数组
    //     sum += item;
    // }
    // console.log(sum);

    // for(var item of list){
    //     console.log(item);
    // }


    // 目的: 对数组的循环遍历进行封装 可以快速遍历数组,取值和执行特定操作
    // var list = [2, 8, 4, 6, 5, 9, 3, 7, 1];

    // function fn(a,b,c){ //形参  a:循环的当前元素  b:循环的当前下标  c:原数组
    //     console.log(a,b,c);
    // }

    // for (var i = 0; i < list.length; i++) { // 循环遍历
    //     var item = list[i]; // 循环的当前元素
    //     var index = i;      // 循环的当前下标
    //     var array = list;   // 原数组

    //     if(fn){ // 每次遍历 => 执行函数fn  => 传入实参 循环的当前元素 循环的当前下标 原数组
    //         fn(item,index,array); //实参
    //     }
    // }


    // list => 需要遍历的数组
    // fn   => 回调函数(传入时不执行,每次循环数组时执行  => 提前决定好要执行的内容,调用时执行)
    function myForEach(list, fn) {
        debugger;
        // var list = [2, 8, 4, 6, 5, 9, 3, 7, 1];

        // function fn(a,b,c){ //形参  a:循环的当前元素  b:循环的当前下标  c:原数组
        //     console.log(a,b,c);
        // }

        // var list = arr;
        // var fn = function(item,index,array){
        //     console.log(item,index,array);
        // }

        for (var i = 0; i < list.length; i++) { // 循环遍历
            var item = list[i]; // 循环的当前元素
            var index = i;      // 循环的当前下标
            var array = list;   // 原数组

            if (fn) { // 每次遍历 => 执行函数fn  => 传入实参 循环的当前元素 循环的当前下标 原数组
                fn(item, index, array); //实参
            }
        }
    }

    debugger;

    var arr = ["a", "b", "c", "d"];

    myForEach(arr, function (item, index, array) {
        console.log(item, index, array);
    });

    var str = "";
    myForEach(arr, function (item, index, array) {
        // console.log(item,index,array);
        str += item;
    });
    console.log(str);








</script>

</html>